package com.jy.wms.service;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.jy.wms.common.UUIDUtils;
import com.jy.wms.common.annotions.BaseServiceDescribe;
import com.jy.wms.common.base.BaseService;
import com.jy.wms.common.base.ServiceException;
import com.jy.wms.common.base.SucessException;
import com.jy.wms.dao.WmsLineMapper;
import com.jy.wms.pojo.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
* @ClassName: WmsLineService.java
* @Description: TODO(这里用一句话描述这个类的作用)
* @Author ln
* @Date Tue Oct 17 14:42:39 CST 2017
*/

@Service
public class WmsLineService extends BaseService<WmsLineMapper,WmsLine> {

 /**
 * 插入一条记录
 * @param entity 实体对象
 * @return int
 */
 @BaseServiceDescribe(moduleName = "新增线路",btnName = "新增线路")
public void baseInsert( WmsLine entity)throws SucessException,ServiceException {
       int getCounts=dao.getcount(entity.getXlmc(),entity.getHzid(),null);//查询该货主下有无相同路线名称
        if (getCounts==0){
            entity.setId(UUIDUtils.uuid());
            //添加线路表数据
            int i=dao.baseInsert(entity);
            if (i>0){
                List<WmsLineDetailed> list=entity.getList();
                WmsLineDetailed ws=null;
                StringBuffer sb=new StringBuffer();
                for (int j=0;j<list.size();j++){
                    ws=new WmsLineDetailed();
                    //查询路线明细中 市是否存在 如果存在 不可以放入明细表中
                /*    int sfcz=dao.getcountSsCz(list.get(j).getSheng(),list.get(j).getShi(),entity.getHzid(),entity.getCkid());
                    if (sfcz>0){
                        sb.append(list.get(j).getSheng());
                        sb.append(list.get(j).getShi());
                    }else {*/
                        ws.setId(UUIDUtils.uuid());
                        ws.setXlid(entity.getId());
                        ws.setSheng(list.get(j).getSheng());
                        ws.setCs(list.get(j).getShi());
                        dao.baseMxInsert(ws);//添加线路明细数据
                   /* }*/
                }
                if (sb.length()==0){
                    throw new SucessException("线路新增成功");
                }/*else {
                    throw new SucessException("线路新增成功,"+sb+"省市已存在");
                }*/

            }else {
                throw new ServiceException("线路新增失败");
            }
        }else {
            throw new ServiceException("相同货主下线路不能重复添加");
        }
}

/**
* 插入一条记录（匹配有值的字段）
* @param entity 实体对象
* @return int
*/
public Integer baseInsertSelective(WmsLine entity){
     return dao.baseInsertSelective( entity);
}

/**
* 删除（根据主键ID删除）
* @param id 主键
* @return int
*/
public Integer baseDeleteByPrimaryKey(String id){
     return dao.baseDeleteByPrimaryKey( id);
}

/**
* 删除（根据ID 批量删除）
* @param idList 主键ID列表
* @return int
*/
public Integer baseDeleteBathPrimaryKeys(List<String> idList){
     return dao.baseDeleteBathPrimaryKeys( idList );
}

/**
* 分页查询
* @param entity 实体
* @return Page<WmsLine>
*/
@BaseServiceDescribe(moduleName = "线路",btnName = "分页查询")
public Page<WmsLine> baseSelectPage(WmsLine entity )throws Exception {
    Page<WmsLine> list=null;
    try {
        PageHelper.startPage(entity.getPage(),entity.getRows());
        list=(Page<WmsLine>)dao.baseSelectPage(entity);
        return list;
    }catch (Exception e){
        throw new ServiceException("线路分页查询失败",e);
    }
}
/**
* 查询（根据主键ID查询）
* @param id 主键ID
* @return WmsLine
*/
@BaseServiceDescribe(moduleName = "根据id查询线路",btnName = "根据id查询线路")
public WmsLine baseSelectByPrimaryKey(String id ) throws Exception {
    WmsLine wl=null;
    try {
        wl= dao.baseSelectByPrimaryKey(id);
        return wl;
    }catch (Exception e){
        throw new ServiceException("线路查询失败",e);
    }

}

/**
* 查询（根据ID 批量查询）
* @param idList 主键ID列表
* @return list
*/
public Integer baseSelectBathPrimaryKeys(List<WmsLine> idList ){
     return dao.baseSelectBathPrimaryKeys( idList );
}

/**
*修改 （匹配有值的字段）
* @param entity 主键ID列表
* @return int
*/
@BaseServiceDescribe(moduleName = "编辑线路",btnName = "编辑线路")
public void baseUpdateByPrimaryKeySelective( WmsLine entity) throws SucessException,ServiceException {
        int getCounts=dao.getcount(entity.getXlmc(),entity.getHzid(),entity.getId());//查询该货主下有无相同路线名称
   //去重
   List<WmsLineDetailed> list=entity.getList();
   for(int j=0;j<list.size();j++) {
       for (int k = 0; k < list.size(); k++) {
           if (j != k) {
               if (list.get(j).getSheng().equals(list.get(k).getSheng())) {
                   if (list.get(k).getSheng().equals(list.get(k).getSheng())) {
                       throw new ServiceException("所选省市有重复选择，请检查后重新绑定");
                   }
               }
           }
       }
   }
        if (getCounts==0){
            int i=dao.baseUpdateByPrimaryKeySelective(entity);
            if (i>0){
                //修改成功 根据路线id 删除省市
                    dao.delectSs(entity.getId());

                    WmsLineDetailed ws=null;
                    StringBuffer sb=new StringBuffer();

                    for (int j=0;j<list.size();j++){
                        ws=new WmsLineDetailed();
                        //查询路线明细中 市是否存在 如果存在 不可以放入明细表中
                   /*    Integer sfcz=dao.getcountSsCz(list.get(j).getSheng(),list.get(j).getShi(),entity.getHzid(),entity.getCkid());
                        if (sfcz>0){
                            sb.append(list.get(j).getSheng());
                            sb.append(list.get(j).getShi());
                        }else {*/
                            ws.setId(UUIDUtils.uuid());
                            ws.setXlid(entity.getId());
                            ws.setSheng(list.get(j).getSheng());
                            ws.setCs(list.get(j).getShi());
                            dao.baseMxInsert(ws);//添加线路明细数据
                       /* }*/
                    }
                  //  if (sb.length()>0){
                    /*    throw new SucessException("线路编辑成功,"+sb+"省市已存在");
                    }else {*/
                        throw new SucessException("线路编辑成功");
                  //  }
            }else {
                throw new ServiceException("线路编辑失败");
            }
        }
}

/**
*修改（根据主键ID修改）
* @param entity 主键ID列表
* @return int
*/
public Integer baseUpdateByPrimaryKey(WmsLine entity){
     return dao.baseUpdateByPrimaryKey( entity);
}

    /**
     *查询路线名称
     */
    public Integer getcount(String xlmc, String hzid, String id){
        return dao.getcount(xlmc, hzid ,id);
    }

    /**
     *作废（根据主键ID修改）
     * @param ids 主键ID列表
     * @return int
     */
    public void baseZuoFei(List<String> ids, String sfzf) throws SucessException,ServiceException {
        int count=0;
            for (String id:ids){
                //查询客户是否已经使用改路线
                String idd=dao.basekehu(id);
                System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"+idd);
                //如果客户表中有则已经被使用
                if (idd.equals("0")){
                    //如果客户表中没有则可以作废
                     int i=dao.ZuoFei(sfzf,id);
                     if (i>0){
                         count++;
                    }
                }else{
                    throw new ServiceException("线路作废失败,该路线已被使用");
                }
            }
             if(count>0){
                 throw new SucessException("线路作废成功");
             }
    }

    /**
     *激活（根据主键ID修改）
     * @param ids 主键ID列表
     * @return int
     */
    public void baseJiHuo(List<String> ids, String sfzf) throws SucessException,ServiceException {
        int i=dao.baseZuoFei(ids,sfzf);
        if (i>0){
            throw new SucessException("线路激活成功");
        }else{
            throw new ServiceException("线路激活失败");
        }
    }

    /**
     * 查询集货库位组
     * @param
     * @return
     */
    @BaseServiceDescribe(moduleName = "集货库位",btnName = "集货库位")
    public List<WmsLibrarypositiongroup> jhKwz(String sshzid, String kwzlx, String sfyx) throws Exception {
        List<WmsLibrarypositiongroup> list=null;
        List<WmsLibraryPosition> listkw=null;
        try {
            list=dao.jhKwz(sshzid,kwzlx,sfyx);
            for (int i=0;i<list.size();i++){
                listkw= dao.kwSearch(list.get(i).getId());
                list.get(i).setList(listkw);
            }
            return list;
        }catch (Exception e){
            throw  new SecurityException("查询集货库位组失败",e);
        }
    }
    //获取省市数据
    @BaseServiceDescribe(moduleName = "省市",btnName = "查询省市")
    public List<WmsProvincial> getShengInfo(){
        List<WmsProvincial> list=null;
        List<WmsProvincial> listkw=null;
        try {
            list=dao.getShengInfo();
            for (int i=0;i<list.size();i++){
                listkw= dao.getShiInfo(list.get(i).getPid());
                list.get(i).setList(listkw);
            }
            return list;
        }catch (Exception e){
            throw  new SecurityException("查询省市失败",e);
        }


    }
    /**
     *根据线路id 查询线路明细
     */
    public List<WmsLineDetailed> lingMxSelect(@Param("id") String id) throws ServiceException {
        List<WmsLineDetailed> list=null;
        try {
            list=dao.lingMxSelect(id);
            return list;
        }catch (Exception e){
            throw new ServiceException("查询城市明细失败");
        }
    }

    /**
     * 查询库位
     * @param sskwzid
     * @return
     */
   /* @BaseServiceDescribe(moduleName = "库位",btnName = "模糊查询货主")
    public List<WmsLibraryPosition> hzSearch(String sskwzid,String mc){
        if (sskwzid!=null && sskwzid.equals("")){
        }else{
            PageHelper.startPage(1,20);
        }
        return dao.hzSearch(sskwzid,mc);
    }*/
    //线路预修改查询
    public WmsLine getUpdateByXl(String id){

        return dao.getUpdateByXl(id);
    }


}
